/**
 * @Author:  renyc
 * @Date: 2022年12月5日09:44:57
 */

import * as Cesium from 'cesium/Cesium';
import * as mapv from "mapv";
import Layer from "../Layer";

/**
 * 
 * @class MapvLayer
 * @deprecated
 * @description MapV的可视化图层
 * 集成：
 * 1）集成了百度的MapV图层。
 * 问题(2022-12-05)
 * 1) 未解决mapv库import问题
 *    问题：使用import * as mapv from "map"导入mapv库时，会报错mapv所引用的Cesium无法初始化问题。因此，无法使用import导入mapv。
 *    方案：在html中使用<scrtip src="mapv.js">的方式导入mapv库。具体代码如下。除了mapv库，还需要导入Cesium库。
 *     <script src="lib/Cesium/Cesium.js"></script>
       <link rel="stylesheet" type="text/css" href="ib/Cesium/Widgets/widgets.css" />
       <script src="lib/mapv/mapv.js"></script>
 * 2）mapv的可视化效果不好。Mapv图层刷新滞后，在Earth视口发生变化时，mapv图层不能同步更新可视化。可能与mapv使用2d渲染而不是webgl有关。
 *    
 */       
class MapvLayer extends Layer{

    constructor(name, options){

        if(!mapv){
            throw new Error('MapvLayer：miss mapv lib')
        }

        super(name);

        this._options = options;
        this._dataset = undefined;
        this._delegate = undefined;


    }

    setDataset(dataset){
        this._dataset = dataset;
        this._delegate && 
        this._delegate.update({ data: this._dataSet, option: this._option })
    }

    /**
     * 将Layer挂载到Viewer上(内部方法)
     * @protected
     * @Override
     */
     _attach(){
        console.log("MapvLayer attach");

        let viewer = this._viewer;

        let val = (typeof Cesium !== 'undefined');
        if (typeof Cesium == 'undefined') {
            alert("undefined");
        }

        let dataset = this._dataset || new mapv.DataSet([]);
        //let dataset = new mapv.DataSet([]);
        this._delegate = new mapv.cesiumMapLayer(
            this._viewer.delegate,
            dataset,
            this._options
        )
        viewer.scene.canvas.setAttribute('tabIndex', 0)
        //this._state = State.ADDED

    }

    /**
     * 将Layer从Viewer上卸载(内部方法)
     * @protected
     * @Override
     */
    _detach(){
        console.log("ChartLayer detach");

        this._delegate && this._delegate.remove();
        //this._state = State.REMOVED;
    }    
}

export default MapvLayer
